package cn.com.jonpad.stomplearn2.ctrl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class GreetingController {
	@Autowired
	private SimpMessagingTemplate simpMessagingTemplate;

	/**
	 * 传统的HTTP请求处理方法
	 * 指定了一个页面，用来实现WebSocket客户端发送公告功能，使用的是@RequestMapping，所以接收的是http请求，进行页面跳转。
	 * @return
	 */
	@RequestMapping("/helloSocket")
	public String index(){
		return "/hello/index";
	}

	/**
	 * 接收客户端发送功公告的WebSocket请求，使用的是@MessageMapping。
	 *
	 * 改进后的代码更简单，着重理解一下@SendTo。
	 * _@SendTo定义了消息的目的地。
	 * 结合例子解释就是“接收/app/change-notice发来的value，
	 * 然后将value转发到/topic/notice客户端。
	 *
	 * /topic/notice是客户端发起连接后，
	 * 订阅服务端消息时指定的一个地址，
	 * 用于接收服务端的返回，
	 * 后面我们在写客户端代码的时候会看见。
	 * @param value
	 * @return
	 */
	@MessageMapping("/change-notice")
	@SendTo("/topic/notice")
	public String greeting(String value) {
		// 本方法中的实现是一旦从客服端接受到消息，立刻返回给订阅了/topic/notice地址的客服端
		return value+"[from @MessageMapping to @SendTo]";
	}
}
